<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>类的基本知识</title>
  </head>
  <body></body>
  <script type="text/javascript">
    /*
    总结：
    1.类中的构造器不是必须写的，要对实例进行一些初始化的操作，如添加指定属性时才写
    2.如果A类继承了B类，A类中写了构造器，那么A类构造器中的super必要要调用
    3.类中所定义的方法，都是放在额类的原型对象上，供实例去使用
    */
    class Person {
      //构造方法
      constructor(name, age) {
        //构造器中的this是谁？- 类的实例对象
        this.name = name;
        this.age = age;
      }
      //一般方法
      speak() {
        //speak方法放在哪里？-类的原型对象上，供实例使用
        console.log(`我叫${this.name},年龄${this.age}`);
      }
    }
    //创建一个Student类，继承于Person类
    class Student extends Person {
      constructor(name, age, grade) {
        // this.name = name;
        // this.age = age;
        super(name, age);
        this.grade = grade;
      }
    }
    const p = new Student("tom", 16, "初三");
    console.log("p", p);
    class Car {
      constructor(name, price) {
        this.name = name;
        // this.whell = 4;
        this.price = price;
      }
      //类中可以直接写赋值语句,如下代码的含义是：给Car的实例对象添加一个属性，名为a值为1
      a = 1;
      wheel = 4;
    }
    const c1 = new Car("奔驰", 199);
    const c2 = new Car("宝马", 299);
    console.log(c1);
    console.log(c2);
  </script>
</html>
